home *** CD-ROM | disk | FTP | other *** search
- ; Subroutine.: INKEY.ASM
- ; Author.....: Dave Green
- ; Date.......: 10/27/83, 11/3/83.
- ; Notice.....: Copyright 1983, Dave Green, All Rights Reserved
- ; Notes......: INKEY function for use in dBASE II.
- ;
- ;
- ORG 0A400H ; DEFINE LOAD ADDRESS
- ;
- ; SETUP SECTION.
- ; MUST RUN THIS SECTION BEFORE THE OTHER SECTIONS CAN BE USED.
- ;
- SETUP: LHLD 0006H ; GET DOS ENTRY POINT ADDRESS
- SHLD ENTRY+1 ; MOVE IT TO JUMP INSTRUCTION
- ; IN CODE
- LXI H,CMDTEST ; GET COMMAND TEST ADDRESS
- SHLD 0006H ; REPLACE NORMAL DOS ENTRY POINT
- RET
- ;
- ; RESTORE SECTION.
- ; MUST RUN THIS SECTION TO RESTORE THE NORMAL INPUT
- ; KEYBOARD INPUT FOR dBASE II.
- ;
- RESTORE:
- LHLD ENTRY+1 ; GET ORIGINAL DOS ENTRY POINT
- SHLD 0006H ; PUT IT BACK
- RET
- ;
- ; THE NORMAL CALL 0005H IS DIVERTED TO THIS ROUTINE,
- ; WHICH INTERCEPTS DIRECT CONSOLE I/O COMMANDS.
- ; OTHER DOS COMMANDS ARE UNAFFECTED.
- ;
- CMDTEST:
- PUSH PSW ; SAVE STATE
- MOV A,C ; MOVE COMMAND TO REGISTER A
- CPI 03H ; RAW CONSOLE INPUT COMMAND
- ; ISSUED?
- JZ INTERCEPT ; YES, INTERCEPT IT
- CPI 06H ; DIRECT CONSOLE I/O COMMAND
- ; ISSUED?
- JNZ DOS ; NO, PASS COMMAND TO DOS
- MOV A,E
- CPI 0FFH ; INPUT/STATUS REQUEST?
- JZ INTERCEPT ; YES, INTERCEPT IT
- CPI 0FEH ; STATUS REQUEST?
- JZ INTERCEPT ; YES, INTERCEPT IT
- CPI 0FDH ; INPUT REQUEST?
- JZ INTERCEPT ; YES, INTERCEPT IT
- JMP DOS ; COMMAND IS OUTPUT,
- ; PASS IT TO DOS
- ;
- INTERCEPT:
- MVI C,0H ; COMMAND IS CONSOLE INPUT, SO RETURN
- ; BINARY 0. IN OTHER WORDS, FOOL dBASE
- ; INTO BELIEVING THERE IS NOTHING IN THE
- ; BUFFER TO READ.
- POP PSW
- RET
- ;
- DOS: POP PSW ; COMMAND IS NOT CONSOLE INPUT, PASS IT
- ; TO DOS
- ENTRY: JMP 0000H ; ADDRESS OF JUMP SET BY SETUP ROUTINE
- ;
- ;
- ; INKEY SECTION.
- ; THIS IS THE ROUTINE dBASE WILL ACTUALLY USE TO GET A CHARACTER.
- ;
- INKEY: PUSH H ; SAVE ADDRESS OF STRING PARAMETER
- MVI C,06H ; SETUP DIRECT CONSOLE I/O COMMAND
- MVI E,0FFH
- CALL ENTRY ; CALL DOS ENTRY POINT DIRECTLY,
- ; BY-PASSING 05H
- POP H ; GET ADDRESS OF STRING PARAMETER
- INX H ; POINT TO FIRST CHAR OF STRING
- MOV M,A ; MOVE CHAR (0 IF NO CHAR)
- ; TO STRING PARAMETER
- RET
- END